import axios from 'axios'
/* 
console.log(import.meta.env);
开发模式：
{
  BASE_URL:"/",
  DEV:true,
  MODE:"development",
  PROD:false,
  SSR:false,
  VITE_APP_API_BASE_URL: "http://admin.jinding.gzzsu.com/"  // 读取.env.development文件
}

生产模式：
{ 
  BASE_URL:"/",
  DEV:false,
  MODE:"production",
  PROD:true,
  SSR:false,
  VITE_APP_API_BASE_URL: "https://api.gzzxue.com/shop115"  // 读取.env.production文件
*/

console.log('8888888888888888888', import.meta.env.VITE_APP_API_BASE_URL);

const service = axios.create({
    // vite使用import.meta.env访问环境变量
    baseURL: import.meta.env.VITE_APP_API_BASE_URL,

    timeout: 5000
})


/*
 *   request 请求拦截器 需要拦截请求的原因：
 *   1.config中包含了某些不符合服务器要求的信息
 *   2.发送网络请求的时候需要向用户展示一些加载中的图标
 *   3.网站需要登录才能请求资源，也就是需要token才能请求资源
 */
service.interceptors.request.use(
    config => {
        // 在这里可以设置请求头
        // 必须返回配置否则报错：Cannot read properties of undefined (reading 'cancelToken')
        return config
    },
    error => {
        // 对请求错误做些什么
        // console.log(error)
        return Promise.reject(error)
    }
)

// response 响应拦截器
// 修改响应信息，比如数据转换、错误处理等
service.interceptors.response.use(
    response => {
        // console.log("response响应拦截器", response);

        // 在这里处理返回数据
        if (response.status !== 200) {
            console.error('Error:', response.status)
            return Promise.reject(new Error(response.message || 'Error'))
        } else {
            return response.data
        }
    },
    err => {
        console.log(err)
        // 对响应错误做些什么
        if (err.request.status) {
            switch (err.request.status) {
                case 400:
                    // 处理错误信息，例如抛出错误信息提示，或者跳转页面等处理方式。
                    err.message = "错误请求";
                    break;
                case 401:
                    err.message = "未授权，请重新登录";
                    break;
                case 403:
                    err.message = "拒绝访问";
                    break;
                case 404:
                    err.message = "请求错误,未找到该资源!!!!";
                    alert(err.message)
                    break;
                case 405:
                    err.message = "请求方法未允许";
                    break;
                case 408:
                    err.message = "请求超时";
                    break;
                case 500:
                    err.message = "服务器端出错";
                    break;
                case 501:
                    err.message = "网络未实现";
                    break;
                case 502:
                    err.message = "网络错误";
                    break;
                case 503:
                    err.message = "服务不可用";
                    break;
                case 504:
                    err.message = "网络超时";
                    break;
                case 505:
                    err.message = "http版本不支持该请求";
                    break;
                default:
                    err.message = `连接错误${err.request.status}`;
            }
        }

        return Promise.reject(err)
    }
)

// 封装具体的请求方法
export const get = (url, params) => {
    return service.get(url, { params });
};

export const post = (url, data) => {
    return service.post(url, data);
};

export const put = (url, data) => {
    return service.put(url, data);
};

export const Delete = (url, data) => {
    return service.delete(url, data);
};

export const uploadFile = (url, data) => {
    return service.post(url, data, {
        headers: {
            'content-type': 'multipart/form-data'
        }
    });
};

// export default service
export default {
    get,
    post,
    put,
    Delete,
    uploadFile
}
